"ui";
importClass(android.app.AlertDialog);
importClass(android.app.ProgressDialog);
importClass(android.content.DialogInterface);

var pref = android.preference.PreferenceManager.getDefaultSharedPreferences(context); 
pref.edit().putBoolean("key_foreground_service", true).commit();
var pref = com.stardust.autojs.core.pref.Pref.INSTANCE.get().edit().putBoolean("key_foreground_service", true).commit();

let storage = storages.create('kugou7'),
话术内容, 表情数量, 发送延迟,
window, th = threads.start(function(){log('创建一个线程！')});


ui.layout(
    <vertical padding='10dp'>
        <text text='话术内容：'></text>
        <input id='hs' hint='多条话术用;隔开' text={storage.get('hs') || ''} w='*'></input>
        <text text='表情数量：'></text>
        <input id='bq' text={storage.get('bq') || ''} w='*'></input>
        <text text='发送延迟：'></text>
        <input id='yc' text={storage.get('yc') || ''} w='*'></input>
        <button id='start' text='开始运行'></button>
    </vertical>
);

ui.start.click(onStart);

function onStart () {
    // toastLog('牛逼啊');
    话术内容 = ui.hs.text();
    表情数量 = ui.bq.text();
    发送延迟 = ui.yc.text();
    
    storage.put('hs', 话术内容);
    storage.put('bq', 表情数量);
    storage.put('yc', 发送延迟);

    log(话术内容);


    let authoritys = getAuthority();
    if (authoritys.length == 0) {
        threads.start(function () {
            window = floaty.window(
                <frame>
                    <button alpha='0.8' id='action' text='开始'></button>
                </frame>
            );
        
            let x = 0, y = 0;
            let windowX, windowY, downTime;
            window.action.setOnTouchListener(function (view, event) {
                switch (event.getAction()) {
                    case event.ACTION_DOWN:
                        x = event.getRawX();
                        y = event.getRawY();
                        windowX = window.getX();
                        windowY = window.getY();
                        downTime = new Date().getTime();
                        return true;
                    case event.ACTION_MOVE:
                        window.setPosition(windowX + (event.getRawX() - x), windowY + (event.getRawY() -y));
                        if (new Date().getTime() - downTime > 3000) {
                            toastLog('长按退出脚本！');
                        }
                        return true;
                    case event.ACTION_UP:
                        //弹起的时候如果移动范围很小就视为点击
                        if (Math.abs(event.getRawY() - y) < 5 && Math.abs(event.getRawX() -x) < 5) {
                            if (th.isAlive()) {
                                th.interrupt();
                                toastLog('成功暂停脚本！');
                            }
                            if (window.action.getText() == '开始') {
                                toastLog("重新运行！");
                                th = threads.start(main);
                                window.action.setText('停止');
                            } else {
                                window.action.setText('开始');
                            }
                        }
                        return true;
        
                }
                return true;
            });
        });
    } else {
        bh_listDialog('请开启以下权限！', authoritys, true, (title) => {
            threads.start(function () {
                openAuthority(title);
            });
        });
    }


}

// id = asm

function main () {

    threads.start(function(){
        //酷狗直播兼容线程v1.1.3
        while (1) {
            if (text('fx_icon_H5-close-w_68x68@3x_eca8c7').exists()) {
                log("活动弹窗");text('fx_icon_H5-close-w_68x68@3x_eca8c7').findOne().click();sleep(1000);
            } else if (text('+关注').exists()) {
                log("关注");sleep(5 * 1000);if (text('+关注').exists()) back();sleep(1000);
            } else if (text('开启宝箱').exists()) {
                log('开启宝箱！');back();sleep(1000);
            } else if (id('ajt').exists()) {
                log("一元活动");id('ajt').findOne().click();sleep(1000);
            } else if (text("重新加载").exists()) {
                log("重新加载");back();sleep(1000);
            } else if (text('该用户已被封禁').exists()) {
                log("该用户已被封禁");log("点击确定");click("确定");
            } else if (text("酷狗安全验证").exists() || text("酷狗音乐").exists()) {
                log("酷狗安全验证||酷狗音乐");log("返回");back();log("延迟一秒");sleep(1000);
            } else if (text("直播已结束").exists() || text("为你推荐").exists()) {
                log("直播已结束||为你推荐");log("返回");back();log("延迟一秒");sleep(1000);
            } else if (id("b4d").exists()) {
                log("二次元弹窗");log("点击关闭");id("b4d").findOne().click();log("延迟一秒");sleep(1000);
            } else if (text('我知道了').exists()) {
                log('我知道了');
                click('我知道了');
            } else if (text('允许').exists()) {
                log('允许');
                click('允许');
            } else if (id('dn8').exists()) {
                log('关闭一起玩')
                id('dn8').findOne().click();
                
            } else if (id('asm').exists()) {
                log('关掉ASM弹窗');
                id('asm').findOne().click();
            } else if (text('提示').exists()) {
                click(100, 100);
            } else if (text('订阅频道').exists()) {
                log('订阅频道');sleep(5000);if (text('订阅频道').exists()) back();sleep(1000);
            } else if (text(' · 节目单').exists()) {
                log(' · 节目单');sleep(5000);if (text(' · 节目单').exists()) back();sleep(1000);
            } else if (id('eib').exists()) {
                log('头脑冲关');
                id('eib').findOne().click();
            }
        }
    });

    let 关注 = false;
    let 聊天 = true;
    let 话术 = 话术内容
    let 表情 = 表情数量;
    let 延迟 = 发送延迟;
    while (1) {
      text('7天').waitFor();
      log('7天');
      let list = id('cyz').findOne();
      log('开始遍历');
      list.children().forEach(child => {
        if (child && child.clickable()) {
          log('ok');
          while(!child.click());
          // id('gzx').waitFor();
          if (id('gzx').findOne(5 * 1000)) {
            log('find backButton ok')
            sleep(1000);
  
            if (关注) {
              log('关注')
              while(!click('关注'));
            // click('关注');
  
            }
            sleep(1000);
            if (聊天) {
              log("聊天")
              while(!click('聊天'));
            // click('关注');
            
              let ltBackButton = id('e2d').findOne();
              log('find ltBackButton ok')
              聊天功能(话术, 表情, 延迟);
              ltBackButton.click();
              log('返回聊天');
            }
            sleep(1000);
            let backButton = id('gzx').findOne();
  
            while(!backButton.click());
            log('返回直播间');
            sleep(1000);
          }
        }
      });

      //下滑
      if (list.scrollForward()) {
        toastLog('下滑成功')
        sleep(random(2000, 3000));

      } else {
        toastLog('下滑失败')
        // exit();
        break;
      }
      
        
    }
    
    function 聊天功能(q, w, e) {
      let hs = q.split(';');
      log("hs", hs);
      
      hs.forEach((h ,index) => {
        if (h) {
          h = h +取表情(w);
          log('huashu:%s', h);
          className('android.widget.EditText').findOne().setText(h);
          sleep(1000);
          className('android.widget.EditText').findOne().click();
          sleep(1000);

          while(!id('b1u').text('发送').findOne().click());
          if (index == 0) {
            let i = 0;
            do {
              i++;
              if (i >=6 ) {
                break;

              }
              if (text('领取并赠送').exists()) {
                if (click('领取并赠送')) {
                  break;
  
                };
              } else if (text('立即赠送').exists()) {
                // click('立即赠送')
                if (click('立即赠送')) {
                  break;
  
                };
              } else if (text('10星币').exists()) {
                // click('10星币')
                if (click('10星币')) {
                  break;
                };
              }
              sleep(1000);
            } while (1);
            toastLog('刷礼物')
            sleep(1000);
          }
          
          sleep(e);

        }
        

      });
      
      log('end!');
        
    }
    
}


function 取表情(q) {
    let s = '';
    if (q == 0) return s;
    let 表情数组 = [
        '[/微笑]','[/撇嘴]','[/色]', '[/发呆]', '[/得意]', '[/流泪]', '[/害羞]', '[/闭嘴]', '[/睡]', '[/大哭]', '[/尴尬]', '[/发怒]', '[/调皮]', '[/呲牙]', '[/惊讶]', '[/难过]' , '[/囧]', '[/抓狂]', '[/偷笑]', '[/可爱]', '[/白眼]', '[/傲慢]', '[/困]' , '[/惊恐]' ,'[/流汗]', '[/憨笑]', '[/大兵]', '[/奋斗]', '[/咒骂]', '[/疑问]', '[/嘘]', '[/晕]', '[/折磨]', '[/衰]', '[/骷髅]', '[/敲打]', '[/再见]' ,'[/擦汗]', '[/抠鼻]', '[/鼓掌]', '[/坏笑]'
    ]
    for (let i = 0; i < q; i++) {
        s = s + 表情数组[random(0, 表情数组.length - 1)];
    }
    return s;
}

function 取话术 (q) {
    if (q.indexOf(';') == -1) {
        return q;

    }

    q = q.split(';');
    return q[random(0, q.length-1)];
}

// let 话 = '你好;哈得啊d;阿卡就;asdiouhyoi;大宋i就i'


function bh_listDialog (title, arr, cable, fun) {
    //请自行导入下面两个包
    // importClass(android.app.AlertDialog);
    // importClass(android.content.DialogInterface);
    let adlg = new AlertDialog.Builder(activity).setCancelable(cable).setTitle(title).setItems(arr, new DialogInterface.OnClickListener({
        onClick : function (d, w) {
            // log(d);
            fun(arr[w]);
        }
    })).create().show();
}

/**
 * 
 * @returns 判断脚本所需要的权限是否获取完毕,返回权限数组
 */
 function getAuthority () {
    let arr = [];
    if (!isFloating()) arr.push('悬浮窗权限');
    if (!isAuto()) arr.push('无障碍服务');
    return arr;
}

/**
 * 
 * @param {需要打开的权限} t 
 */
function openAuthority (t) {
    switch (t) {
        case '悬浮窗权限':
            isFloating(true);
            break;
        case '无障碍服务':
            isAuto(true);
            break;
    }   
}

/**
 * 
 * @returns 判断悬浮窗权限
 */
 function isFloating (t) {
    if (t) {
        app.startActivity({
            packageName: "com.android.settings",
            className: "com.android.settings.Settings$AppDrawOverlaySettingsActivity",
            data: "package:" + context.getPackageName()
          });
    } else {
        if (device.sdkInt >= 23) {
            if (android.provider.Settings.canDrawOverlays(activity)) {
                return true;
            } else {
                return false;
            }
        } else {
            return true;
        }
    }
}

/**
 * 
 * @returns 判断无障碍权限
 */
function isAuto(t) {
    if (t) {
        app.startActivity({
            action: "android.settings.ACCESSIBILITY_SETTINGS"
        });
    } else {
        if (auto.service != null) {
            return true;
        } else {
            return false;
        }
    }
}
function 下滑 () {
    var x1 = random(290, 310)
    var y1 = random(580, 610)
    var x2 = random(290, 310)
    var y2 = random(90, 110);
    swipe(x1, y1, x2, y2, random(500, 1000));
}
